import copy
'''
深拷贝和浅拷贝总结：
浅拷贝：（copy）
对于不可变类型 Number 、String 、Tuple，浅拷贝仅仅是地址的指向，并不会开辟新的地址空间。
对于可变数据类型 List 、Dictionary 、Set，浅拷贝会开辟新的地址空间（仅仅是最顶层开辟新的地址空间，里面的元素地址还是一样的），进行浅拷贝。
浅拷贝后，改变原始对象中可变数据类型里面元素的值，会同时影响拷贝对象的元素的值；改变原始对象中不可变数据类型里面元素的值，只有原始对象里面的值会改变。
（操作拷贝对象对原始对象的也是同理）

深拷贝（deepcopy）
在深拷贝中，对于不可变数据类型 Number 、String 、Tuple，深拷贝仍然是地址的指向，并不会开辟新的地址空间。
对于可变数据类型 List 、Dictionary 、Set，深拷贝会开辟新的地址空间（最顶层地址和里面的元素地址都会开辟新的地址空间），进行深拷贝。
深拷贝后，改变原始对象中的值（不区分可变类型和不可变类型），只有原始对象中的值受影响，拷贝对象不会被影响；同理，改变拷贝对象中的值（不区分可变类型和不可变类型），
只有拷贝对象中的值受影响，原始对象不会被影响。
————————————————
版权声明：本文为CSDN博主「oito」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/wls666/article/details/99481823
'''
num1=17
num2=copy.copy(num1)
print(num1,num2)
print(id(num1),id(num2))#140716671030816 140716671030816
num1=12
print(num1,num2)
print(id(num1),id(num2))

lst = [1, [2, 3]]
lst2 = lst.copy()
lst.append(4)
lst[1].append(4)
print(lst, id(lst))
print(lst2, id(lst2))

lst = [1, [2, 3]]
lst2 = copy.deepcopy(lst)
lst.append(4)
lst[1].append(4)
print(lst, id(lst))
print(lst2, id(lst2))